// 对于一个非负整数，按顺序将其各位数字的平方相加，得到一个新的数，再对新得到的数重复这个过程，
// 如果最终能够到达某个数为 1，那么原始的数就被称为快乐数。如果这个过程最终进入一个除 1 以外的循环，那么原始的数则不是快乐数。

// 思路：哈希表
// 时间复杂度：O(logn)，n是输入的数字
// 空间复杂度：O(logn)，set的大小

function isHappy(n) {
    let set = new Set()
    while (n !== 1 && !set.has(n)) {
        set.add(n)
        n = getSum2(n)
    }
    return n === 1
}

function getSum(n) {
    return String(n).split('').reduce((sum, cur) => sum + cur ** 2, 0)
}

function getSum2(n) {
    let sum = 0
    while (n) {
        sum += (n % 10) ** 2
        n = Math.floor(n / 10)
    }
    return sum
}

console.log(isHappy(123))